#include "game_room_list.h"
#include "lv_drv_conf.h"
#include <stdio.h>
#include "../utils/msg.h"

// 创建房间按钮
static lv_obj_t *create_room_btn;

// 加入房间按钮
static lv_obj_t *join_room_btn;

// 确定按钮
static lv_obj_t *confirm_btn;

// 返回按钮
static lv_obj_t *return_btn;

// 加入房间小页面确定按钮
static lv_obj_t *confirm_small_btn;

// 创建房间小页面确定按钮
static lv_obj_t *create_confirm_small_btn;

// 刷新按钮
static lv_obj_t *refresh_btn;

// 加入房间号文本框
static lv_obj_t *input_area;

// 创建房间号文本框
static lv_obj_t *input_create_area;

// 游戏房间列表背景页面
static lv_obj_t *game_room_list_page;

// 加入游戏小页面
static lv_obj_t *small_join_game_page = NULL;

// 创建房间小页面
static lv_obj_t *create_room_page = NULL;

// 滚轮控件
static lv_obj_t *room_roller;

// 获取滚轮选中项的字符串
char selected_str[128];

// 提示人满消息框
static lv_obj_t *msgbox = NULL;

// 提示创建房间失败消息框
static lv_obj_t *create_false_msgbox = NULL;

static lv_obj_t *create_label_warning;

static lv_obj_t *create_label_message;

static lv_obj_t *create_false_btn_confirm;

static lv_obj_t *create_btn_label_confirm;

// 提示加入房间失败消息框
static lv_obj_t *join_false_msgbox = NULL;

static lv_obj_t *join_label_warning;

static lv_obj_t *join_label_message;

static lv_obj_t *join_false_btn_confirm;

static lv_obj_t *join_btn_label_confirm;

// 人满消息框确定关闭按钮
static lv_obj_t *people_full_confirm_btn;

// 声明一个动态数组
Vec(char) room_roller_data;

// 房间列表数据
room_list *room_list_data;

// 键盘
static lv_obj_t *keyboard;

static void ta_event_cb(lv_event_t *e) {
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t *ta = lv_event_get_target(e);
    lv_obj_t *kb = lv_event_get_user_data(e);
    if (code == LV_EVENT_FOCUSED) {
        lv_keyboard_set_textarea(kb, ta);
        // 页面组件整体向上偏移
        // lv_obj_set_y(game_room_list_page, -lv_obj_get_y(ta) + 50);
        lv_obj_clear_flag(kb, LV_OBJ_FLAG_HIDDEN);
    } else if (code == LV_EVENT_DEFOCUSED) {
        lv_keyboard_set_textarea(kb, NULL);
        lv_obj_set_y(game_room_list_page, 0);
        lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);
    }
}

static void create_false_confirm_btn_event_cb(lv_event_t *e) {
    if (create_false_msgbox != NULL) {
        lv_obj_add_flag(create_false_msgbox, LV_OBJ_FLAG_HIDDEN);
    }
}

// 确认小按钮事件
static void create_confirm_small_btn_event_cb(lv_event_t *e) {

    char *room_name = lv_textarea_get_text(input_create_area);
    printf("room_name: %s\n", room_name);
    // 把文本框输入的房间id封装成json数据
    cJSON *room_name_json = cJSON_CreateObject();
    cJSON_AddStringToObject(room_name_json, "room_name", room_name);
    cJSON_AddNumberToObject(room_name_json, "user_id", current_user.id);
    cJSON_AddStringToObject(room_name_json, "username", current_user.username);

    response_t *resp =
        request(MEVEN_HTTP_POST, "/game/create_room", NULL, room_name_json);
    // 判断recv_data字符串中是否包含"success"
    if (resp->code == RESPONSE_OK) {
        log_info("create room successful\n");
        get_gameStatus(current_user.id);
        // curr_gameStatus->id = current_user->id;
        //  log_info("current_user->id:%d\n",current_user->id);
        //  log_info("curr_gameStatus->id:%d\n",curr_gameStatus->id);
        //  游戏列表页面销毁
        response_free(resp);
        game_room_list_page_destroy();
        // 游戏房间的初始化
        table_page_display();
    } else {
        // 这里可以再做一个消息框提示用户进不去房间的事件

        log_info("create room failed");
        if (create_room_page != NULL) {
            lv_textarea_set_text(input_create_area, "");
            lv_obj_add_flag(create_room_page, LV_OBJ_FLAG_HIDDEN);
        }

        create_false_msgbox_display();
    }
    log_info("create success");
}

// 创建房间按钮事件
static void create_room_btn_event_cb(lv_event_t *e) {

    // 点击创建房间后显示创房小页面
    if (create_room_page == NULL) {
        // 创建加入游戏小页面
        create_room_page = lv_obj_create(game_room_list_page);
        //
        // 设置界面大小
        lv_obj_set_size(create_room_page, JOIN_GAME_PAGE_WIDTH,
                        JOIN_GAME_PAGE_HEIGHT);
        lv_obj_set_pos(create_room_page, JOIN_COMPARE_MAIN_X,
                       JOIN_COMPARE_MAIN_Y);
        // 在创建房间小页面中添加文本
        lv_obj_t *text = lv_label_create(create_room_page);
        lv_label_set_text(text, "room");
        lv_obj_align(text, LV_ALIGN_TOP_MID, -130, 20);
        // 在创建房间小页面中添加输入框
        input_create_area = lv_textarea_create(create_room_page);
        lv_textarea_set_one_line(input_create_area, true);
        lv_obj_set_width(input_create_area, 200);
        lv_obj_set_height(input_create_area, 50);
        lv_obj_align(input_create_area, LV_ALIGN_TOP_MID, 0, 0);
        // 在创建房间小页面中添加确定按钮
        create_confirm_small_btn = lv_btn_create(create_room_page);
        lv_obj_set_size(create_confirm_small_btn, 100, 50);
        lv_obj_align(create_confirm_small_btn, LV_ALIGN_BOTTOM_MID, 0, 0);
        // lv_obj_add_flag(small_join_game_page, LV_OBJ_FLAG_HIDDEN);
        //  设置事件，传递输入框数据
        lv_obj_add_event_cb(create_confirm_small_btn,
                            create_confirm_small_btn_event_cb, LV_EVENT_CLICKED,
                            NULL);
        // 设置按钮标签
        lv_obj_t *create_confirm_small_label =
            lv_label_create(create_confirm_small_btn);
        lv_obj_align_to(create_confirm_small_label, create_confirm_small_btn,
                        LV_ALIGN_LEFT_MID, 0, 0);
        lv_obj_set_style_text_font(create_confirm_small_label,
                                   &lv_font_montserrat_16, 0);
        lv_label_set_text(create_confirm_small_label, "Confirm");
        ////////////////
        lv_obj_add_event_cb(input_create_area, ta_event_cb, LV_EVENT_ALL,
                            keyboard);
    }
    // 这里做弹出小界面的逻辑
    lv_obj_clear_flag(create_room_page, LV_OBJ_FLAG_HIDDEN);
}

// static void join_room_confirm_btn_cb(lv_event_t* e){

//     lv_obj_add_flag(small_join_game_page, LV_OBJ_FLAG_HIDDEN);
// }

static void join_false_confirm_btn_event_cb(lv_event_t *e) {
    if (join_false_msgbox != NULL) {
        lv_obj_add_flag(join_false_msgbox, LV_OBJ_FLAG_HIDDEN);
    }
}

// 确认小按钮事件
static void confirm_small_btn_event_cb(lv_event_t *e) {

    char *room_number = lv_textarea_get_text(input_area);
    // printf("room_number: %s\n", room_number);
    // // 把文本框输入的房间id封装成json数据
    // cJSON *room_id_json = cJSON_CreateObject();
    // cJSON_AddNumberToObject(room_id_json, "game_id", atoi(room_number));
    // cJSON_AddNumberToObject(room_id_json, "user_id", current_user.id);
    // cJSON_AddStringToObject(room_id_json, "username", current_user.username);
    // response_t *recv_data =
    //     request(MEVEN_HTTP_POST, "/game/join_room", NULL, room_id_json);
    // log_info("recv_data:%s",recv_data);
    // 判断recv_data字符串中是否包含"success"
    response_t *resp = join_room(atoi(room_number));
    get_gameStatus(atoi(room_number));
    if (resp->code == RESPONSE_OK) {
        log_info("join room successful");

        // int room_id = 0; // id%d room_name%s count%d status%s
        // // 使用 sscanf 函数从字符串中解析数字，这里假设格式为 "人数:x/y"
        // if (sscanf(selected_str, "id%d room_name%*s   count%*d status%*s",
        //            &room_id) == 1) {
        //     get_gameStatus(room_id);
        // }
        //get_gameStatus(current_user.id);

        response_free(resp);

        // 登录成功后跳转到房间页面
        game_room_list_page_destroy();
        table_page_display();
    } else {
        // 这里可以再做一个消息框提示用户进不去房间的事件

        log_info("username or password error");
        if (small_join_game_page != NULL) {
            lv_textarea_set_text(input_area, "");
            lv_obj_add_flag(small_join_game_page, LV_OBJ_FLAG_HIDDEN);
        }
        join_false_msgbox_display();
    }
}

// 加入房间按钮事件
static void join_room_btn_event_cb(lv_event_t *e) {

    if (small_join_game_page == NULL) {
        // 创建加入游戏小页面
        small_join_game_page = lv_obj_create(game_room_list_page);
        //
        // 设置界面大小
        lv_obj_set_size(small_join_game_page, JOIN_GAME_PAGE_WIDTH,
                        JOIN_GAME_PAGE_HEIGHT);
        lv_obj_set_pos(small_join_game_page, JOIN_COMPARE_MAIN_X,
                       JOIN_COMPARE_MAIN_Y);
        // 在小页面中添加文本
        lv_obj_t *text = lv_label_create(small_join_game_page);
        lv_label_set_text(text, "room");
        lv_obj_align(text, LV_ALIGN_TOP_MID, -130, 20);
        // 在小页面中添加输入框
        input_area = lv_textarea_create(small_join_game_page);
        lv_textarea_set_one_line(input_area, true);
        lv_obj_set_width(input_area, 200);
        lv_obj_set_height(input_area, 50);
        lv_obj_align(input_area, LV_ALIGN_TOP_MID, 0, 0);
        // 在小页面中添加确定按钮
        confirm_small_btn = lv_btn_create(small_join_game_page);
        lv_obj_set_size(confirm_small_btn, 100, 50);
        lv_obj_align(confirm_small_btn, LV_ALIGN_BOTTOM_MID, 0, 0);
        // lv_obj_add_flag(small_join_game_page, LV_OBJ_FLAG_HIDDEN);
        //  设置事件，传递输入框数据
        lv_obj_add_event_cb(confirm_small_btn, confirm_small_btn_event_cb,
                            LV_EVENT_CLICKED, NULL);
        // 设置按钮标签
        lv_obj_t *confirm_small_label = lv_label_create(confirm_small_btn);
        lv_obj_align_to(confirm_small_label, confirm_small_btn,
                        LV_ALIGN_LEFT_MID, 0, 0);
        lv_obj_set_style_text_font(confirm_small_label, &lv_font_montserrat_16,
                                   0);
        lv_label_set_text(confirm_small_label, "Confirm");
        ////////////////
        lv_obj_add_event_cb(input_area, ta_event_cb, LV_EVENT_ALL, keyboard);
    }
    // 这里做弹出小界面的逻辑
    lv_obj_clear_flag(small_join_game_page, LV_OBJ_FLAG_HIDDEN);
}

// 滚轮事件
static void roller_event_cb(lv_event_t *e) {
    // 获取事件代码
    lv_event_code_t code = lv_event_get_code(e);
    // 检查事件是否为选项更改
    if (code == LV_EVENT_VALUE_CHANGED) {
        // 获取滚轮控件对象
        lv_obj_t *roller = lv_event_get_target(e);
        // 使用lv_roller_get_selected_str()获取当前选中的文本
        lv_roller_get_selected_str(roller, selected_str, sizeof(selected_str));
        // 打印选中的文本
        printf("Selected option: %s\n", selected_str);
    }
}

// 人数已满的消息框关闭回调
static void msgbox_close_action(lv_event_t *e) {
    // // 获取消息框对象
    // lv_obj_t* godie_msgbox = lv_event_get_current_target(e);

    // 隐藏消息框
    // 可以多次使用了，主要是要全局变量声明时直接定义，然后if()判断一下
    // 然后clear隐藏然后在这里判断不为空就隐藏。虽然不知道为什么，但是实现了。
    if (msgbox != NULL) {
        lv_obj_add_flag(msgbox, LV_OBJ_FLAG_HIDDEN);
    }
}

static void people_full_btn_cb(lv_event_t *e) {

    // 创建消息框
    // static lv_obj_t *msgbox = NULL;
    if (msgbox == NULL) {
        static char *people_full_confirm_btns[] = {" ", NULL};
        msgbox = lv_msgbox_create(lv_scr_act(), "Warning", "People are full!",
                                  people_full_confirm_btns, false);
        // lv_msgbox_set_text(msgbox, "人数已满");
        //  创建确定按钮并添加到消息框
        people_full_confirm_btn = lv_msgbox_get_btns(msgbox);
        // 设置按钮标签
        lv_obj_t *people_full_confirm_label =
            lv_label_create(people_full_confirm_btn);
        lv_obj_align(people_full_confirm_label, LV_ALIGN_CENTER, 0, 0);
        lv_obj_align(people_full_confirm_btn, LV_ALIGN_CENTER, 0, 0);
        lv_obj_set_style_text_font(people_full_confirm_label,
                                   &lv_font_montserrat_16, 0);
        lv_label_set_text(people_full_confirm_label, "Confirm");
        lv_obj_add_event_cb(people_full_confirm_btn, msgbox_close_action,
                            LV_EVENT_CLICKED, NULL);

        // 设置消息框的样式，例如居中显示等
        /* 为消息框设置文本居中的样式 */
        lv_obj_set_style_text_align(msgbox, LV_TEXT_ALIGN_CENTER, 0);
        lv_obj_set_width(msgbox, 200); // 设置消息框宽度
        // 居中显示消息框
        lv_obj_align(msgbox, LV_ALIGN_CENTER, 0, 0);
    }
    // 显示消息框
    lv_obj_clear_flag(msgbox, LV_OBJ_FLAG_HIDDEN);
}

// 确定按钮事件
static void confirm_btn_event_cb(lv_event_t *e) {
    // 'e' 包含了事件信息和对象指针
    // lv_obj_t * btn = lv_event_get_target(e); // 获取触发事件的对象（按钮）

    int num_people = 0; // id%d room_name%s count%d status%s
    int room_id = 0;
    // 使用 sscanf 函数从字符串中解析数字，这里假设格式为 "人数:x/y"
    if (sscanf(selected_str, "id%d room_name%*s count%d status%*s", &room_id,
               &num_people) == 2) {
        // 比较数字
        bool result = (num_people < 3);

        // 根据比较结果执行操作
        if (result) {
            printf("人数小于3，结果为 true\n");
            response_t *resp = join_room(room_id);
            get_gameStatus(room_id);
            log_info("join room");
            // 销毁游戏房间列表界面
            // 执行操作，比如跳转到另一个界面
            if (resp->code == RESPONSE_OK) {
                game_room_list_page_destroy();
                table_page_display();
            }
            response_free(resp);
        } else {
            printf("人数等于或大于3，结果为 false\n");
            //===================================人满了进不去，这个逻辑还没做
            // 为按钮添加点击事件回调
            lv_obj_add_event_cb(confirm_btn, people_full_btn_cb,
                                LV_EVENT_CLICKED, NULL);
        }
    } else {
        printf("解析人数失败\n");
    }
}

// 返回按钮事件
static void return_btn_event_cb(lv_event_t *e) {
    // //做logout操作
    // log_info("%d\n",current_user->id);
    // response_t* revieve_data = auth_logout(current_user->id);
    // log_info("%d\n",revieve_data->code);
    // if(revieve_data->code == RESPONSE_OK){//成功
    //     // 销毁游戏房间列表界面
    //     game_room_list_page_destroy();
    //     log_info("game_room_list_page_destroy\n");
    //     // 显示登陆界面
    //     login_page_display();
    //     log_info("login_page_display\n");
    // }else{
    //     // 错误
    //     printf("退出错误\n");
    // }
    // 销毁游戏房间列表界面
    game_room_list_page_destroy();
    // log_info("game_room_list_page_destroy\n");
    // 显示登陆界面
    login_page_display();
}

// 刷新按钮事件
static void refresh_btn_event_cb(lv_event_t *e) {
    vec_init(&room_roller_data, 0, 16);

    room_list_data = get_room_list();

    char buf[1024];
    char *p = buf;
    log_info("%d", room_list_data->len);
    // 这里要传来房间号，房主名字或id，人数参数才能继续写=======================
    for (int i = 0; i < room_list_data->len; i++) {
        room *room_data = &room_list_data->data[i];
        sprintf(buf, "id%d room_name%s count%d status%s\n", room_data->id,
                room_data->room_name, room_data->player_count,
                game_status[room_data->status]);
        vec_extend(&room_roller_data, &p, strlen(buf));
    }
    if (room_roller_data.len > 0) {
        room_roller_data.data[--room_roller_data.len] = '\0';
    }
    log_info("show rooms");
    lv_roller_set_options(
        room_roller, room_roller_data.data,
        LV_ROLLER_MODE_NORMAL); // 最后一个参数是无限循环的作用
    lv_obj_align(room_roller, LV_ALIGN_RIGHT_MID, 0,
                 0); // 位置不对就调这里的x,y偏移量
    lv_roller_set_visible_row_count(room_roller, 10);
}

// 游戏房间列表页面初始化
void game_room_list_page_display() {

    // 创建游戏房间列表页面
    game_room_list_page = lv_obj_create(lv_scr_act());
    // 设置界面大小
    lv_obj_set_size(game_room_list_page, LV_HOR_RES, LV_VER_RES);
    lv_obj_set_style_radius(game_room_list_page, 0, 0);
    lv_obj_set_style_border_width(game_room_list_page, 0, 0);
    lv_obj_set_style_outline_width(game_room_list_page, 0, 0);

    // 创建背景对象
    static lv_style_t style_bg;
    lv_style_init(&style_bg);
    lv_style_set_bg_img_src(&style_bg, &game_room_list_interface);
    lv_obj_add_style(game_room_list_page, &style_bg, LV_PART_MAIN);

    // 创建按钮区
    lv_obj_t *btn_area = lv_obj_create(game_room_list_page);
    lv_obj_set_size(btn_area, 400, 480);
    lv_obj_set_pos(btn_area, 0, 0); // 将按钮区域放置在屏幕的左上角
    // 这行我不知道作用是什么，我先不注释
    lv_obj_add_flag(btn_area, LV_OBJ_FLAG_HIDDEN);

    // 初始化创建房间按钮
    create_room_btn = lv_btn_create(game_room_list_page);
    lv_obj_set_size(create_room_btn, 100, 50);
    lv_obj_align_to(create_room_btn, btn_area, LV_ALIGN_LEFT_MID, 0, -180);
    // 设置事件，传递输入框数据
    lv_obj_add_event_cb(create_room_btn, create_room_btn_event_cb,
                        LV_EVENT_CLICKED, NULL);
    // 设置按钮标签
    lv_obj_t *create_room_label = lv_label_create(create_room_btn);
    lv_obj_align_to(create_room_label, create_room_btn, LV_ALIGN_CENTER, 0, 0);
    lv_obj_set_style_text_font(create_room_label, &lv_font_montserrat_16, 0);
    lv_label_set_text(create_room_label, "Create");

    // 初始化加入房间按钮
    join_room_btn = lv_btn_create(game_room_list_page);
    lv_obj_set_size(join_room_btn, 100, 50);
    lv_obj_align_to(join_room_btn, btn_area, LV_ALIGN_LEFT_MID, 0, -90);
    // 设置事件，传递输入框数据
    lv_obj_add_event_cb(join_room_btn, join_room_btn_event_cb, LV_EVENT_CLICKED,
                        NULL);
    // 设置按钮标签
    lv_obj_t *join_room_label = lv_label_create(join_room_btn);
    lv_obj_align_to(join_room_label, join_room_btn, LV_ALIGN_CENTER, 0, 0);
    lv_obj_set_style_text_font(join_room_label, &lv_font_montserrat_16, 0);
    lv_label_set_text(join_room_label, "Join");

    // 初始化确认按钮
    confirm_btn = lv_btn_create(game_room_list_page);
    lv_obj_set_size(confirm_btn, 100, 50);
    lv_obj_align_to(confirm_btn, btn_area, LV_ALIGN_LEFT_MID, 0, 0);
    // 设置事件，传递输入框数据
    lv_obj_add_event_cb(confirm_btn, confirm_btn_event_cb, LV_EVENT_CLICKED,
                        NULL);
    // 设置按钮标签
    lv_obj_t *confirm_label = lv_label_create(confirm_btn);
    lv_obj_align_to(confirm_label, confirm_btn, LV_ALIGN_CENTER, 0, 0);
    lv_obj_set_style_text_font(confirm_label, &lv_font_montserrat_16, 0);
    lv_label_set_text(confirm_label, "Confirm");

    // 初始化返回按钮
    refresh_btn = lv_btn_create(game_room_list_page);
    lv_obj_set_size(refresh_btn, 100, 50);
    lv_obj_align_to(refresh_btn, btn_area, LV_ALIGN_LEFT_MID, 200, 90);
    // 设置事件，传递输入框数据
    lv_obj_add_event_cb(refresh_btn, refresh_btn_event_cb, LV_EVENT_CLICKED,
                        NULL);
    // 设置按钮标签
    lv_obj_t *refresh_label = lv_label_create(refresh_btn);
    lv_obj_align_to(refresh_label, refresh_btn, LV_ALIGN_CENTER, 0, 0);
    lv_obj_set_style_text_font(refresh_label, &lv_font_montserrat_16, 0);
    lv_label_set_text(refresh_label, "Refresh");

    // 初始化刷新按钮
    return_btn = lv_btn_create(game_room_list_page);
    lv_obj_set_size(return_btn, 100, 50);
    lv_obj_align_to(return_btn, btn_area, LV_ALIGN_LEFT_MID, 0, 90);
    // 设置事件，传递输入框数据
    lv_obj_add_event_cb(return_btn, return_btn_event_cb, LV_EVENT_CLICKED,
                        NULL);
    // 设置按钮标签
    lv_obj_t *return_label = lv_label_create(return_btn);
    lv_obj_align_to(return_label, return_btn, LV_ALIGN_CENTER, 0, 0);
    lv_obj_set_style_text_font(return_label, &lv_font_montserrat_16, 0);
    lv_label_set_text(return_label, "Return");

    roller_display();
    // 初始化键盘
    // 键盘
    keyboard = lv_keyboard_create(lv_scr_act());
    lv_obj_set_style_text_font(keyboard, &lv_font_dejavu_16_persian_hebrew, 0);

    // lv_obj_add_event_cb(input_area, ta_event_cb, LV_EVENT_ALL, keyboard);
    lv_obj_add_flag(keyboard, LV_OBJ_FLAG_HIDDEN);
}

void roller_display() {
    msg_init();
    room_roller = lv_roller_create(lv_scr_act());
    // 获取当前样式
    // static lv_style_t room_roller_style = lv_obj_get_style(room_roller);
    static lv_style_t room_roller_style;
    lv_style_init(&room_roller_style);
    lv_obj_add_style(room_roller, &room_roller_style, 0);
    // 设置宽度（这里应该是设置滚轮的宽度，而不是style指针的宽度）
    lv_style_set_width(&room_roller_style, 300);

    lv_style_set_bg_opa(&room_roller_style, LV_OPA_30);
    // 这里要传来房间号，房主名字或id，人数参数才能继续写=======================
    // 搞一个动态数组来存储每一个滚轮元素的数据

    vec_init(&room_roller_data, 0, 16);
    room_roller_data.data[0] = '\0';
    room_list_data = get_room_list();

    char buf[1024];
    char *p = buf;
    log_info("%d", room_list_data->len);
    // 这里要传来房间号，房主名字或id，人数参数才能继续写=======================
    for (int i = 0; i < room_list_data->len; i++) {
        room *room_data = &room_list_data->data[i];
        sprintf(buf, "id%d room_name%s count%d status%s\n", room_data->id,
                room_data->room_name, room_data->player_count,
                game_status[room_data->status]);
        vec_extend(&room_roller_data, &p, strlen(buf));
    }
    if (room_roller_data.len > 0) {
        room_roller_data.data[--room_roller_data.len] = '\0';
    }
    log_info("%s", room_roller_data.data);
    lv_roller_set_options(
        room_roller, room_roller_data.data,
        LV_ROLLER_MODE_NORMAL); // 最后一个参数是无限循环的作用
    lv_obj_align(room_roller, LV_ALIGN_RIGHT_MID, 0,
                 0); // 位置不对就调这里的x,y偏移量
    lv_roller_set_visible_row_count(room_roller, 10);
    // 好像不需要事件，选择房间不是通过这里触发事件，而是确定按钮触发事件
    //  添加事件回调函数
    lv_obj_add_event_cb(room_roller, roller_event_cb, LV_EVENT_ALL, NULL);
}

void join_false_msgbox_display() {
    // 创建消息框
    // static lv_obj_t *msgbox = NULL;
    if (join_false_msgbox == NULL) {
        // 创建一个小界面作为主界面的子界面
        join_false_msgbox =
            lv_obj_create(game_room_list_page); // 使用lv_scr_act()作为父对象

        // 设置小界面的样式
        lv_obj_set_size(join_false_msgbox, JOIN_GAME_PAGE_WIDTH,
                        JOIN_GAME_PAGE_HEIGHT);
        lv_obj_set_pos(join_false_msgbox, JOIN_COMPARE_MAIN_X,
                       JOIN_COMPARE_MAIN_Y);
        lv_obj_set_style_bg_color(join_false_msgbox,
                                  lv_color_make(0xFF, 0xFF, 0xFF),
                                  0); // 设置背景颜色为白色

        // 创建文本标签
        join_label_warning = lv_label_create(join_false_msgbox);
        lv_label_set_text(join_label_warning, "Warning");
        lv_obj_set_style_text_font(join_label_warning, &lv_font_montserrat_16,
                                   0);
        // 计算文本位置，这里简单地将文本放在屏幕顶部，可以根据需要调整
        lv_obj_align(join_label_warning, LV_ALIGN_TOP_MID, 10, 10);

        // 创建第二行文本
        join_label_message = lv_label_create(join_false_msgbox);
        lv_label_set_text(join_label_message, "Join room false");
        lv_obj_set_style_text_font(join_label_message, &lv_font_montserrat_16,
                                   0);
        lv_obj_align(join_label_message, LV_ALIGN_TOP_MID, 10, 30);

        // 创建按钮
        join_false_btn_confirm = lv_btn_create(join_false_msgbox);
        lv_obj_set_size(join_false_btn_confirm, 120, 50); // 设置按钮大小
        // 将按钮垂直居中，位置在文本下方
        lv_obj_align(join_false_btn_confirm, LV_ALIGN_TOP_MID, 10, 140);
        // 设置事件，传递输入框数据
        lv_obj_add_event_cb(join_false_btn_confirm,
                            join_false_confirm_btn_event_cb, LV_EVENT_CLICKED,
                            NULL);
        // 创建按钮上的标签
        join_btn_label_confirm = lv_label_create(join_false_btn_confirm);
        lv_label_set_text(join_btn_label_confirm, "Confirm");
        lv_obj_center(join_btn_label_confirm); // 使标签在按钮内居中
    }
    // 显示消息框
    lv_obj_clear_flag(join_false_msgbox, LV_OBJ_FLAG_HIDDEN);
}

void create_false_msgbox_display() {
    // 创建消息框
    // static lv_obj_t *msgbox = NULL;
    if (create_false_msgbox == NULL) {
        // 创建一个小界面作为主界面的子界面
        create_false_msgbox =
            lv_obj_create(game_room_list_page); // 使用lv_scr_act()作为父对象

        // 设置小界面的样式
        lv_obj_set_size(create_false_msgbox, JOIN_GAME_PAGE_WIDTH,
                        JOIN_GAME_PAGE_HEIGHT);
        //lv_obj_set_pos(join_false_msgbox, JOIN_COMPARE_MAIN_X,
        //               JOIN_COMPARE_MAIN_Y);
        lv_obj_set_style_bg_color(create_false_msgbox,
                                  lv_color_make(0xFF, 0xFF, 0xFF),
                                  0); // 设置背景颜色为白色

        // 创建文本标签
        create_label_warning = lv_label_create(create_false_msgbox);
        lv_label_set_text(create_label_warning, "Warning");
        lv_obj_set_style_text_font(create_label_warning, &lv_font_montserrat_16,
                                   0);

        // 计算文本位置，这里简单地将文本放在屏幕顶部，可以根据需要调整
        lv_obj_align(create_label_warning, LV_ALIGN_TOP_MID, 10, 10);

        // 创建第二行文本
        create_label_message = lv_label_create(create_false_msgbox);
        lv_label_set_text(create_label_message, "Create room false");
        lv_obj_set_style_text_font(create_label_message, &lv_font_montserrat_16,
                                   0);
        lv_obj_align(create_label_message, LV_ALIGN_TOP_MID, 10, 30);

        // 创建按钮
        create_false_btn_confirm = lv_btn_create(create_false_msgbox);
        lv_obj_set_size(create_false_btn_confirm, 120, 50); // 设置按钮大小
        // 将按钮垂直居中，位置在文本下方
        lv_obj_align(create_false_btn_confirm, LV_ALIGN_TOP_MID, 10, 140);
        // 设置事件，传递输入框数据
        lv_obj_add_event_cb(create_false_btn_confirm,
                            create_false_confirm_btn_event_cb, LV_EVENT_CLICKED,
                            NULL);
        // 创建按钮上的标签
        create_btn_label_confirm = lv_label_create(create_false_btn_confirm);
        lv_label_set_text(create_btn_label_confirm, "Confirm");
        lv_obj_center(create_btn_label_confirm); // 使标签在按钮内居中
    }
    // 显示消息框
    lv_obj_clear_flag(create_false_msgbox, LV_OBJ_FLAG_HIDDEN);
}

// 游戏房间列表页面销毁
void game_room_list_page_destroy() {
    // 销毁界面元素
    lv_obj_del(game_room_list_page);
    // 可能需要用上，先注释在这
    //  //删除小界面，手动删除
    //  lv_obj_del(small_join_game_page);
    //  keyboard 父类为初始屏幕对象，手动删除
    lv_obj_del(keyboard);
}
